const alovaInstance = alova.createAlova({
    baseURL: 'http://127.0.0.1:5555',
    // baseURL: 'http://192.168.225.20:5555/',
    statesHook: VueHook, // 集成 Vue3 响应式系统
    requestAdapter: GlobalFetch(), // 使用 fetch 适配器
    timeout: 300000, // 请求超时时间
  
    // 请求拦截器（添加 Token 等）
    beforeRequest(method) {
        const token = localStorage.getItem('token');
        method.config.headers = {
        ...method.config.headers,
        Authorization: token ? `Bearer ${token}` : ''
        };
    },
  
    // 响应拦截器（统一处理错误）
    responded: {
        onSuccess: async (response, method) => {
            // const contentType = response.headers.get('Content-Type');
            // if (contentType?.includes('application/octet-stream')) {
            //   return response;
            // }
            if (method.config?.meta?.isBinary) {
                return response.status === 200 ? response.blob() : Promise.reject(new Error('文件下载失败'))   ;
            }
            const data = await response.json();
            if (data.code !== 200) 
                throw new Error(data.message);
            return data.result;
        },
        onError: (err) => {
            ElementPlus.ElMessage.error(err.message);
            return Promise.reject(err);
        }
    }
});
// 通用 GET 请求
function get(url, params = {}, config = {}) {
    return alovaInstance.Get(url, {
        params,
        localCache: { mode: 'restore', expire: 300000 }, // 5 分钟缓存
        ...config
    });
}

// 通用 POST 请求
function post(url, data = {}, config = {}) {
    return alovaInstance.Post(url, data, {
        transformData: (rawData) => JSON.stringify(rawData), // 序列化数据
        ...config
    });
}

// 文件下载专用方法
function downloadFile(url, filename, config = {}) {
    return alovaInstance.Get(url, {
        meta: { isBinary: true }, // 标记为二进制流
        ...config
    })
    .send()
    .then(blob => {
        const link = document.createElement('a');
        link.href = URL.createObjectURL(blob);
        link.download = filename;
        link.click();
        URL.revokeObjectURL(link.href);
    });
}
